function closeModelTestingDashboard()
%CLOSEMODELTESTINGDASHBOARD 关闭模型测试仪表板
%   此函数关闭当前打开的模型测试仪表板（Model Testing Dashboard）。
%   用于清理GUI资源和结束测试会话。
%
%语法:
%   closeModelTestingDashboard()
%
%输入参数:
%   无
%
%输出参数:
%   无
%
%说明:
%   - 首先检查Simulink Check许可证是否可用
%   - 调用dashboard.internal.closeDashboard()关闭仪表板
%   - 如果许可证不可用，抛出错误并停止执行
%   - 清理仪表板相关的GUI资源和内存
%
%仪表板关闭效果:
%   - 关闭仪表板主窗口
%   - 停止正在运行的测试任务
%   - 清理临时数据和缓存
%   - 释放占用的系统资源
%   - 保存当前的仪表板状态（如果适用）
%
%使用场景:
%   - 测试会话结束后的清理
%   - 切换到其他测试模型前的准备
%   - 解决仪表板GUI问题
%   - 自动化脚本中的资源管理
%   - 系统资源优化和内存清理
%
%与其他仪表板函数的关系:
%   - openModelTestingDashboard: 打开仪表板
%   - runModelTestingDashboard: 运行仪表板测试
%   - closeModelTestingDashboard: 关闭仪表板
%   构成完整的仪表板生命周期管理
%
%示例:
%   % 基本关闭操作
%   closeModelTestingDashboard();
%   fprintf('模型测试仪表板已关闭\n');
%
%   % 完整的测试会话
%   function completeTestingSession(modelName)
%       try
%           % 1. 打开仪表板
%           openModelTestingDashboard(modelName);
%           
%           % 2. 运行测试
%           runModelTestingDashboard(modelName);
%           
%           % 3. 等待用户查看结果
%           input('按回车键关闭仪表板...', 's');
%           
%       finally
%           % 4. 确保关闭仪表板
%           closeModelTestingDashboard();
%           fprintf('测试会话已完成\n');
%       end
%   end
%
%   % 批量测试中的资源管理
%   function batchTestingWithDashboard(models)
%       for i = 1:length(models)
%           try
%               fprintf('测试模型: %s\n', models{i});
%               
%               % 打开仪表板
%               openModelTestingDashboard(models{i});
%               
%               % 运行测试
%               runModelTestingDashboard(models{i});
%               
%               % 短暂暂停让用户查看
%               pause(2);
%               
%           catch ME
%               fprintf('模型 %s 测试失败: %s\n', models{i}, ME.message);
%           finally
%               % 每个模型后都关闭仪表板
%               try
%                   closeModelTestingDashboard();
%               catch
%                   % 忽略关闭时的错误
%               end
%           end
%       end
%   end
%
%   % 错误恢复场景
%   function recoverFromDashboardError()
%       try
%           % 尝试正常关闭
%           closeModelTestingDashboard();
%           fprintf('仪表板正常关闭\n');
%       catch ME
%           % 如果正常关闭失败，可能需要其他清理方式
%           fprintf('仪表板关闭失败: %s\n', ME.message);
%           
%           % 可能的恢复操作
%           try
%               % 关闭所有模型
%               bdclose('all');
%               
%               % 清理测试管理器
%               clearTestManager();
%               
%               fprintf('已执行替代清理操作\n');
%           catch
%               fprintf('替代清理操作也失败，可能需要重启MATLAB\n');
%           end
%       end
%   end
%
%   % 自动化测试脚本中的使用
%   function automatedTestingWorkflow()
%       models = getModelList();
%       
%       for i = 1:length(models)
%           modelName = models{i};
%           
%           try
%               % 测试序列
%               fprintf('开始测试: %s\n', modelName);
%               openModelTestingDashboard(modelName);
%               runModelTestingDashboard(modelName);
%               
%               % 等待测试完成
%               pause(5);
%               
%               fprintf('完成测试: %s\n', modelName);
%               
%           finally
%               % 确保资源清理
%               closeModelTestingDashboard();
%           end
%       end
%   end
%
%错误处理:
%   如果许可证不可用，函数会抛出错误而不是警告，
%   这确保了在没有适当工具的情况下不会继续执行。
%
%许可证要求:
%   此函数严格要求Simulink Check许可证。
%   与某些其他函数不同，这里会抛出错误而非警告。
%
%GUI资源管理:
%   仪表板是图形用户界面组件，正确关闭对于
%   避免内存泄漏和GUI冲突很重要。
%
%最佳实践:
%   - 在finally块中调用确保总是执行
%   - 在批量操作中每次都关闭以释放资源
%   - 结合try-catch处理可能的关闭错误
%   - 在自动化脚本中包含资源清理
%
%依赖项:
%   dig.isProductInstalled - 检查产品安装状态
%   dashboard.internal.closeDashboard - 内部仪表板关闭函数
%
%参见:
%   openModelTestingDashboard, runModelTestingDashboard, dashboard.internal.closeDashboard
%

%版本: 1.0
%日期: 2021-2024
%


if ~dig.isProductInstalled('Simulink Check')
    error('A Simulink Check license is not available.');
end

% Close the dashboard.
dashboard.internal.closeDashboard();

end
